﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PlattegrondImport;
using BU;

namespace Prijs_je_rijk
{
    public partial class Form1 : Form
    {
        /// <summary>
        /// De bitmap van de plattegrond.
        /// </summary>
        private Bitmap OriginelePlattegrond;
        /// <summary>
        /// De factor waarmee gezoomed wordt.
        /// 100% wil zeggen het originele formaat.
        /// </summary>
        private double zoompercentage;

        private BUWinkel store;

        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Het sluiten van het form 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// Dit is de Import knop
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            ImportGUI importGui = new ImportGUI();
            importGui.ShowDialog();
            //OpenFileDialog open = new OpenFileDialog();
            //open.ShowDialog();
            //string plaatje = open.FileName;


            //OriginelePlattegrond = new Bitmap(plaatje);
            zoompercentage = 100;
            store = BUWinkel.GetInstance();

            if(store != null)
            OriginelePlattegrond = new Bitmap(store.Plattegrond);
        }

        /// <summary>
        /// Als er aan de verticale schuif geschoven wordt.
        /// Dan moet de plattegrond ook mee naar beneden/boven schuiven.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            schuiven((-vScrollBar1.Value),Plattegrond.Left);
        }

        /// <summary>
        /// Als er aan de horizontale schuif wordt geschoven.
        /// Dan moet de plattegrond ook mee naar links/rechts schuiven.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            schuiven(Plattegrond.Top,(-hScrollBar1.Value));
        }

        /// <summary>
        /// Regelt het verschuiven van de plattegrond
        /// </summary>
        /// <param name="Top">Hoeveel er vanuit de top verschoven moet worden</param>
        /// <param name="Left">Hoeveel er vanuit de linker zijde verschoven moet worden</param>
        private void schuiven(int Top, int Left)
        {
            Plattegrond.Top = Top;
            Plattegrond.Left = Left;
        }

        /// <summary>
        /// De zoom in knop
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnZoomIn_Click(object sender, EventArgs e)
        {
            zoompercentage += 10;
            Zoom();
        }

        /// <summary>
        /// De zoom uit knop
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnZoomOut_Click(object sender, EventArgs e)
        {
            if (zoompercentage > 10) { zoompercentage -= 10; }
            Zoom();
        }

        /// <summary>
        /// Zoomt in met de algemene zoomfactor
        /// </summary>
        private void Zoom()
        {
            if (OriginelePlattegrond != null)
            {
                Size formaat = new Size((int)((zoompercentage / 100) * OriginelePlattegrond.Width), (int)((zoompercentage / 100) * OriginelePlattegrond.Height));
                Bitmap zoombmp = new Bitmap(OriginelePlattegrond, formaat);
                int hPercentage = hScrollBar1.Maximum;
                int vPercentage = vScrollBar1.Maximum;
                PlattegrondTonen(zoombmp);
                vScrollBar1.Value = (vScrollBar1.Value * vScrollBar1.Maximum) / vPercentage;
                hScrollBar1.Value = (hScrollBar1.Value * hScrollBar1.Maximum) / hPercentage;
                schuiven(-vScrollBar1.Value, -hScrollBar1.Value);
            }
        }

        /// <summary>
        /// Toont de gegeven afbeelding op het plattegrond vlak.
        /// </summary>
        /// <param name="image">De plattergrond</param>
        private void PlattegrondTonen(Image image)
        {
            btnZoomIn.Visible = true;
            btnZoomOut.Visible = true;
            if (panel1.Height <= image.Height)
            {
                vScrollBar1.Maximum = image.Height - panel1.Height;
                vScrollBar1.Visible = true;
            }
            else { vScrollBar1.Visible = false; }
            if (panel1.Width <= image.Width)
            {
                hScrollBar1.Maximum = image.Width - panel1.Width;
                hScrollBar1.Visible = true;
            }
            else { hScrollBar1.Visible = false; }
            Plattegrond.Image = image;
        }

        /// <summary>
        /// Rekent om waar er daadwerkelijk op de afbeelding heen wordt gewezen
        /// </summary>
        /// <param name="plaats">De om te rekenen plaats</param>
        /// <returns></returns>
        private Point RelatiefNaarDaadwerkelijk(Point plaats)
        {
            plaats.Y = (int) (plaats.Y / zoompercentage * 100);
            plaats.X = (int) (plaats.X / zoompercentage *100);
            return plaats;
        }
        
        /// <summary>
        /// Test voor het bijhouden van de positie.
        /// De muis staat namelijk op een relatief punt.
        /// Vandaar dat het eerst moet worden omgerekend.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Plattegrond_MouseMove(object sender, MouseEventArgs e)
        {
            Point p = new Point((e as MouseEventArgs).X, (e as MouseEventArgs).Y);
            label1.Text = Convert.ToString(p.X);
            label2.Text = Convert.ToString(p.Y);

            p = RelatiefNaarDaadwerkelijk(p);
            label3.Text = Convert.ToString(p.X);
            label4.Text = Convert.ToString(p.Y);
        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {

        }
    }
}
